package com.xjve.framework.hibernate.query.core;

import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * SQL查询服务，提供更友好的API接口
 */
@Service
public class SqlQueryService {

    private final SqlQueryDao sqlQueryDao;

    public SqlQueryService(SqlQueryDao sqlQueryDao) {
        this.sqlQueryDao = sqlQueryDao;
    }

    /**
     * 执行查询，返回实体类列表
     * @param templateName SQL模板名称
     * @param parameters 参数
     * @param resultType 返回类型
     * @param <T> 泛型
     * @return 实体类列表
     */
    public <T> List<T> query(String templateName, Map<String, Object> parameters, Class<T> resultType) {
        return sqlQueryDao.queryFromTemplate(templateName, parameters, resultType);
    }

    /**
     * 执行查询，返回实体类列表（无参数）
     * @param templateName SQL模板名称
     * @param resultType 返回类型
     * @param <T> 泛型
     * @return 实体类列表
     */
    public <T> List<T> query(String templateName, Class<T> resultType) {
        return sqlQueryDao.queryFromTemplate(templateName, null, resultType);
    }

    /**
     * 执行更新操作
     * @param templateName SQL模板名称
     * @param parameters 参数
     * @return 影响行数
     */
    public int execute(String templateName, Map<String, Object> parameters) {
        return sqlQueryDao.executeFromTemplate(templateName, parameters);
    }

    /**
     * 执行更新操作（无参数）
     * @param templateName SQL模板名称
     * @return 影响行数
     */
    public int execute(String templateName) {
        return sqlQueryDao.executeFromTemplate(templateName, null);
    }

    /**
     * 查询记录总数
     * @param templateName SQL模板名称
     * @param parameters 参数
     * @return 记录总数
     */
    public int count(String templateName, Map<String, Object> parameters) {
        return sqlQueryDao.countFromTemplate(templateName, parameters);
    }

    /**
     * 查询记录总数（无参数）
     * @param templateName SQL模板名称
     * @return 记录总数
     */
    public int count(String templateName) {
        return sqlQueryDao.countFromTemplate(templateName, null);
    }
}
